home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
dpmigcc5.zip
/
RSX
/
SOURCE
/
FPU-EMU
/
CRT0FPUW.S
< prev
next >
Wrap
Text File
|
1994-05-27
|
2KB
|
117 lines
/* copro struct */
#define i_orgeip _info
#define i_retsys _info+4
#define i_ebx _info+8
#define i_ecx _info+12
#define i_edx _info+16
#define i_esi _info+20
#define i_edi _info+24
#define i_ebp _info+28
#define i_eax _info+32
#define i_ds _info+36
#define i_es _info+40
#define i_fs _info+44
#define i_gs _info+48
#define i_orgeax _info+52
#define i_eip _info+56
#define i_cs _info+60
#define i_eflags _info+64
#define i_esp _info+68
#define i_ss _info+72
.globl start
.globl _back_to_prg
.globl _debugged
.globl _used_math
.globl _raise
.text
/* called from extender: 1. init exception ; 2. change mathe state */
/* gs = emu data seg */
start:
cmpl $0x98765432,%eax /* exception call ? */
jz L11
cmpl $0x12345678,%eax /* init call ? */
jz L10
movl %edx, %gs:_debugged /* debugged>0 : don't lookahead */
movl %ecx, %gs:_used_math /* used_math>0: don't init */
lret
/* ! can't use movl %eax,gs:xx (bug ??) */
.align 2,144
L10:
movl $_info , %eax /* return coprostruct */
lret
.align 2,144
/* entry : gs = emu sel , ds:esi = info stuct */
L11:
movw %gs, %dx
movw %dx, %ds
movw %dx, %es
movw %dx, %ss
movl emu_esp, %esp
movw i_fs,%fs
pushl $_info
call _math_emulate
_back_to_prg:
movl i_eax,%eax
movl i_ebx,%ebx
movl i_ecx,%ecx
movl i_edx,%edx
movl i_esi,%esi
movl i_edi,%edi
movl i_ebp,%ebp
movw i_es,%es
movw i_fs,%fs
movw i_ss,%ss /* change stack to user */
movl i_esp,%esp
pushl i_eflags
pushl i_cs
pushl i_eip
movw i_ds,%ds
iret
.align 2,144
_abort_emu:
_raise:
movw $0xFFFF,%eax
lret
.data
rsxfpu_ver:
.long 103
dpmi_esp:
.long 0
dpmi_ss:
.long 0
emu_esp:
.long 0xfff0
_debugged:
.long 0
_used_math:
.long 0
.globl _process_npx
_process_npx:
.long _copro
.comm _copro,172
.comm _info,92